In [1]:
import os
In [2]:
import pandas as pd
In [3]:
import numpy as np 
In [4]:
import math
In [5]:
import datetime as dt
In [6]:
import matplotlib.pyplot as plt
In [7]:
# for Evolution we will use these Library
In [8]:
from sklearn.metrics import mean_squared_error, mean_absolute_error, explained_variance_score, r2_score
In [9]:
from sklearn.metrics import mean_poisson_deviance, mean_gamma_deviance, accuracy_score
In [10]:
from sklearn.preprocessing import MinMaxScaler
In [11]:
# for model building we will use these Library
In [12]:
import tensorflow as tf
In [13]:
from tensorflow.keras.models import Sequential
In [14]:
from tensorflow.keras.layers import Dense ,Dropout
In [15]:
from tensorflow.keras.layers import  LSTM
In [16]:
#for plooting we will uses these libraries
In [17]:
import matplotlib.pyplot as plt
In [18]:
from itertools import cycle
In [19]:
import plotly.graph_objects as go
In [20]:
import plotly.express as px
In [21]:
from plotly.subplots import make_subplots
In [22]:
#from plotly.subplots import make_subplotsoad our data set
In [23]:
#load dataset
In [30]:
maindf = pd.read_csv('BTC.csv')
In [31]:
maindf.head()
Out[31]:
Date Open High Low Close Adj Close Volume
0 2014-09-17 465.864014 468.174011 452.421997 457.334015 457.334015 21056800
1 2014-09-18 456.859985 456.859985 413.104004 424.440002 424.440002 34483200
2 2014-09-19 424.102997 427.834991 384.532013 394.795990 394.795990 37919700
3 2014-09-20 394.673004 423.295990 389.882996 408.903992 408.903992 36863600
4 2014-09-21 408.084991 412.425995 393.181000 398.821014 398.821014 26580100
In [32]:
os.getcwd()
Out[32]:
'C:\\Users\\cheta\\OneDrive\\Documents'
In [33]:
os.chdir('C:\\Users\\cheta\\OneDrive\\Documents')
In [34]:
print('total number of days present in the dataset: ', maindf.shape[0])
print('total number of fields present in the dataset:',maindf.shape[1])
total number of days present in the dataset:  2713
total number of fields present in the dataset: 7
In [35]:
maindf.shape
Out[35]:
(2713, 7)
In [36]:
maindf.head()
Out[36]:
Date Open High Low Close Adj Close Volume
0 2014-09-17 465.864014 468.174011 452.421997 457.334015 457.334015 21056800
1 2014-09-18 456.859985 456.859985 413.104004 424.440002 424.440002 34483200
2 2014-09-19 424.102997 427.834991 384.532013 394.795990 394.795990 37919700
3 2014-09-20 394.673004 423.295990 389.882996 408.903992 408.903992 36863600
4 2014-09-21 408.084991 412.425995 393.181000 398.821014 398.821014 26580100
In [37]:
maindf.tail()
Out[37]:
Date Open High Low Close Adj Close Volume
2708 2022-02-15 42586.464844 44667.218750 42491.035156 44575.203125 44575.203125 22721659051
2709 2022-02-16 44578.277344 44578.277344 43456.691406 43961.859375 43961.859375 19792547657
2710 2022-02-17 43937.070313 44132.972656 40249.371094 40538.011719 40538.011719 26246662813
2711 2022-02-18 40552.132813 40929.152344 39637.617188 40030.976563 40030.976563 23310007704
2712 2022-02-19 40026.023438 40418.878906 39713.058594 40122.156250 40122.156250 13736557863
In [38]:
maindf.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2713 entries, 0 to 2712
Data columns (total 7 columns):
 #   Column     Non-Null Count  Dtype  
---  ------     --------------  -----  
 0   Date       2713 non-null   object 
 1   Open       2713 non-null   float64
 2   High       2713 non-null   float64
 3   Low        2713 non-null   float64
 4   Close      2713 non-null   float64
 5   Adj Close  2713 non-null   float64
 6   Volume     2713 non-null   int64  
dtypes: float64(5), int64(1), object(1)
memory usage: 148.5+ KB
In [39]:
maindf.describe()
Out[39]:
Open High Low Close Adj Close Volume
count 2713.000000 2713.000000 2713.000000 2713.000000 2713.000000 2.713000e+03
mean 11311.042503 11614.356195 10975.445286 11323.913062 11323.913062 1.470147e+10
std 16106.431449 16537.501329 15608.369333 16110.362193 16110.362193 2.001575e+10
min 176.897003 211.731003 171.509995 178.102997 178.102997 5.914570e+06
25% 606.396973 609.260986 604.109985 606.718994 606.718994 7.991080e+07
50% 6301.569824 6434.617676 6214.220215 6317.609863 6317.609863 5.098183e+09
75% 10452.399414 10762.644531 10202.387695 10462.259766 10462.259766 2.456992e+10
max 67549.734375 68789.625000 66382.062500 67566.828125 67566.828125 3.509679e+11

Checking for Null Values¶

In [40]:
print('Null Values:',maindf.isnull().values.sum())
Null Values: 0
In [41]:
print('NA values:',maindf.isnull().values.any())
NA values: False
In [42]:
# Final shape of the dataset after dealing with null values
In [43]:
maindf.shape
Out[43]:
(2713, 7)

EDA(Exploratory Data Analysis)¶

In [44]:
#Printing the start and end  date of the dataset
In [45]:
sd=maindf.iloc[0][0]
In [46]:
ed=maindf.iloc[-1][0]
In [47]:
print ('Starting Date',sd)
Starting Date 2014-09-17
In [48]:
print('Ending Date',ed)
Ending Date 2022-02-19

Bitcoin Price Prediction fron Start

Analysis of year 2014¶

In [49]:
maindf['Date']=pd.to_datetime(maindf['Date'],format='%Y-%m-%d')
y_2014 = maindf.loc[(maindf['Date']>= '2014-09-17') &(maindf['Date']<'2014-12-31')]
y_2014.drop(y_2014[['Adj Close','Volume']],axis=1)
Out[49]:
Date Open High Low Close
0 2014-09-17 465.864014 468.174011 452.421997 457.334015
1 2014-09-18 456.859985 456.859985 413.104004 424.440002
2 2014-09-19 424.102997 427.834991 384.532013 394.795990
3 2014-09-20 394.673004 423.295990 389.882996 408.903992
4 2014-09-21 408.084991 412.425995 393.181000 398.821014
... ... ... ... ... ...
100 2014-12-26 319.152008 331.424011 316.627014 327.924011
101 2014-12-27 327.583008 328.911011 312.630005 315.863007
102 2014-12-28 316.160004 320.028015 311.078003 317.239014
103 2014-12-29 317.700989 320.266998 312.307007 312.670013
104 2014-12-30 312.718994 314.808990 309.372986 310.737000

105 rows × 5 columns

In [50]:
monthvise=y_2014.groupby(y_2014['Date'].dt.strftime('%B'))[['Open','Close']].mean()
new_order=['January','February','March','April','May','June','July','August','September','October','November','December']
monthvise = monthvise.reindex(new_order,axis=0)
monthvise
Out[50]:
Open Close
Date
January NaN NaN
February NaN NaN
March NaN NaN
April NaN NaN
May NaN NaN
June NaN NaN
July NaN NaN
August NaN NaN
September 412.654003 407.182428
October 365.748000 364.148873
November 364.850235 366.099799
December 344.146864 341.970366
In [51]:
fig=go.Figure()
fig.add_trace(go.Bar(
x=monthvise.index,
y=monthvise['Open'],
    name='Bitcoin Open Price',
    marker_color='crimson'
 
))

fig.add_trace(go.Bar(
x=monthvise.index,
y=monthvise['Close'],
    name='Bitcoin Close Price',
     marker_color='lightsalmon'
))
fig.update_layout(barmode='group',xaxis_tickangle= -45,
                 title='Monthvise comparison between Bitcoin open and close price')
fig.show()
In [52]:
y_2014.groupby(y_2014['Date'].dt.strftime('%B'))['Low'].min()
monthvise_high=y_2014.groupby(maindf['Date'].dt.strftime('%B'))['High'].max()
monthvise_high=monthvise_high.reindex(new_order,axis=0)
monthvise_low=y_2014.groupby(y_2014['Date'].dt.strftime('%B'))['Low'].min()
monthvise_low=monthvise_low.reindex(new_order,axis=0)

fig = go.Figure()
fig.add_trace(go.Bar(
x=monthvise_high.index,
y=monthvise_high,
    name='Bitcoin high Price',
     marker_color='rgb(0,153,204)'
))
fig.add_trace(go.Bar(
x=monthvise_low.index,
y=monthvise_low,
    name='Bitcoin low  Price',
     marker_color='rgb(255,128,0)'
))
fig.update_layout(barmode='group',
                 title='Monthvise High and Low Bitcoin price')
fig.show()
In [53]:
name =cycle(['Bitcoin Open Price','Bitcoin Close Price','Bitcoin High Price','Bitcoin Low Price'])
fig=px.line(y_2014 ,x=y_2014.Date,y=[y_2014['Open'],y_2014['Close'],
                                    y_2014['High'],y_2014['Low']],
           labels={'Date':'Date','value':'Bitcoin value'})
fig.update_layout(title_text='Bitcoin analysis chart', font_size=15 , font_color='black',legend_title_text='Bitcoin Parameters')
fig.for_each_trace(lambda t: t.update(name=next(name)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()

Analysis of Year 2015¶

In [54]:
maindf['Date']=pd.to_datetime(maindf['Date'],format='%M/%d/%Y')
y_2015=maindf.loc[(maindf['Date']>='2015-01-01')&(maindf['Date']<'2016-01-01')]
y_2015.drop(y_2015[['Adj Close','Volume']],axis=1)
Out[54]:
Date Open High Low Close
106 2015-01-01 320.434998 320.434998 314.002991 314.248993
107 2015-01-02 314.079010 315.838989 313.565002 315.032013
108 2015-01-03 314.846008 315.149994 281.082001 281.082001
109 2015-01-04 281.145996 287.230011 257.612000 264.195007
110 2015-01-05 265.084015 278.341003 265.084015 274.473999
... ... ... ... ... ...
466 2015-12-27 416.514008 424.006989 408.882996 422.822998
467 2015-12-28 423.342987 429.769012 418.480988 422.278992
468 2015-12-29 422.097992 432.983002 420.627014 432.983002
469 2015-12-30 433.299988 434.386993 422.084015 426.619995
470 2015-12-31 425.875000 432.920990 418.734985 430.566986

365 rows × 5 columns

In [55]:
monthvise=y_2015.groupby(y_2015['Date'].dt.strftime('%B'))[['Open','Close']].mean()
new_order=['January','February','March','April','May','June','July','August','September','October','November','December']
monthvise = monthvise.reindex(new_order,axis=0)
monthvise
Out[55]:
Open Close
Date
January 251.799905 248.782547
February 232.821856 234.153645
March 269.278419 269.042259
April 235.708667 235.491534
May 237.161806 236.997001
June 236.941433 238.081766
July 278.857679 279.563740
August 252.986774 250.733805
September 233.486733 233.595533
October 262.306000 264.855356
November 346.866833 348.883332
December 422.618033 424.464547
In [56]:
fig = go.Figure()
fig.add_trace(go.Bar(
x=monthvise.index,
y= monthvise['Open'],
    name='Stock Open Price',
     marker_color='crimson'
))

fig.add_trace(go.Bar(
x=monthvise.index,
y= monthvise['Close'],
    name='Stock Close Price',
     marker_color='Lightsalmon'
))
fig.update_layout(barmode='group',xaxis_tickangle=-45,
                  title='Monthvise comparision between Bitcoin open and close price ')
fig.show()
In [57]:
y_2015.groupby(y_2015['Date'].dt.strftime('%B'))['Low'].min()
monthvise_high=y_2015.groupby(maindf['Date'].dt.strftime('%B'))['High'].max()
monthvise_high=monthvise_high.reindex(new_order,axis=0)
monthvise_low=y_2015.groupby(y_2015['Date'].dt.strftime('%B'))['Low'].min()
monthvise_low=monthvise_low.reindex(new_order,axis=0)

fig = go.Figure()
fig.add_trace(go.Bar(
    x=monthvise_high.index,
    y=monthvise_high,
    name='Bitcoin high Price',
    marker_color='rgb(0,153,204)'
))    
fig.add_trace(go.Bar(
     x=monthvise_low.index,
     y=monthvise_low,
     name='Bitcoin low  Price',
     marker_color ='rgb(255,128,0)'
))
fig.update_layout(barmode='group',
                 title='Monthvise High and Low Bitcoin price')
fig.show()
In [58]:
name =cycle(['Bitcoin Open Price','Bitcoin Close Price','Bitcoin High Price','Bitcoin Low Price'])
fig=px.line(y_2015 ,x=y_2015.Date,y=[y_2015['Open'],y_2015['Close'],
                                    y_2015['High'],y_2015['Low']],
           labels={'Date':'Date','value':'Bitcoin value'})
fig.update_layout(title_text='Bitcoin analysis chart', font_size=15 , font_color='black',legend_title_text='Bitcoin Parameters')
fig.for_each_trace(lambda t: t.update(name=next(name)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()

Analysis of year 2016¶

In [59]:
maindf['Date']=pd.to_datetime(maindf['Date'],format='%Y-%m-%d')
y_2016=maindf.loc[(maindf['Date']>='2016-01-01')&(maindf['Date']<'2017-01-01')]
y_2016.drop(y_2016[['Adj Close','Volume']],axis=1)
monthvise=y_2016.groupby(y_2016['Date'].dt.strftime('%B'))[['Open','Close']].mean()
new_order=['January','February','March','April','May','June','July','August','September','October','November','December']
monthvise = monthvise.reindex(new_order,axis=0)
monthvise
Out[59]:
Open Close
Date
January 412.805902 410.844485
February 402.304692 404.408274
March 417.262033 416.525774
April 433.487433 434.339398
May 459.237547 461.954415
June 638.544834 642.869061
July 662.977779 661.356103
August 581.238966 579.585197
September 604.614034 605.848633
October 640.702546 643.550935
November 725.073804 726.349101
December 821.108255 828.060356
In [60]:
fig = go.Figure()
fig.add_trace(go.Bar(
    x=monthvise.index,
    y= monthvise['Open'],
    name='Bitcoin Open Price',
    marker_color='crimson'
))

fig.add_trace(go.Bar(
    x=monthvise.index,
    y= monthvise['Close'],
    name=' Bitcoin Close Price',
    marker_color='Lightsalmon'
))
fig.update_layout(barmode='group',xaxis_tickangle=-45,
                  title='Monthvise comparision between Bitcoin open and close price ')
fig.show()
In [61]:
y_2016.groupby(y_2016['Date'].dt.strftime('%B'))['Low'].min()
monthvise_high=y_2016.groupby(maindf['Date'].dt.strftime('%B'))['High'].max()
monthvise_high=monthvise_high.reindex(new_order,axis=0)
monthvise_low=y_2016.groupby(y_2016['Date'].dt.strftime('%B'))['Low'].min()
monthvise_low=monthvise_low.reindex(new_order,axis=0)
fig = go.Figure()
fig.add_trace(go.Bar(
    x=monthvise_high.index,
    y=monthvise_high,
    name='Bitcoin high Price',
     marker_color='rgb(0,153,204)'
))  
fig.add_trace(go.Bar(
    x=monthvise_low.index,
    y=monthvise_low,
    name='Bitcoin low  Price',
    marker_color='rgb(255,128,0)'
))
fig.update_layout(barmode='group',
                 title='Monthvise High and Low Bitcoin price')
fig.show()
In [62]:
name =cycle(['Bitcoin Open Price','Bitcoin Close Price','Bitcoin High Price','Bitcoin Low Price'])
fig=px.line(y_2016 ,x=y_2016.Date,y=[y_2016['Open'],y_2016['Close'],
                                    y_2016['High'],y_2016['Low']],
           labels={'Date':'Date','value':'Bitcoin value'})
fig.update_layout(title_text='Bitcoin analysis chart', font_size=15 , font_color='black',legend_title_text='Bitcoin Parameters')
fig.for_each_trace(lambda t: t.update(name=next(name)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()

Analysis of year 2017¶

In [63]:
maindf['Date']=pd.to_datetime(maindf['Date'],format='%Y-%m-%d')
y_2017=maindf.loc[(maindf['Date']>='2017-01-01')&(maindf['Date']<'2018-01-01')]
y_2017.drop(y_2017[['Adj Close','Volume']],axis=1)
monthvise=y_2017.groupby(y_2017['Date'].dt.strftime('%B'))[['Open','Close']].mean()
new_order=['January','February','March','April','May','June','July','August','September','October','November','December']
monthvise = monthvise.reindex(new_order,axis=0)
monthvise
Out[63]:
Open Close
Date
January 914.680971 914.916159
February 1055.620071 1062.533672
March 1133.212576 1129.365228
April 1197.646997 1206.641007
May 1865.748712 1895.383529
June 2630.573332 2636.204346
July 2509.213233 2519.418386
August 3819.812579 3880.989998
September 4077.400993 4064.836312
October 5291.370007 5360.071604
November 7685.745996 7813.132975
December 15175.219601 15294.270980
In [64]:
fig = go.Figure()
fig.add_trace(go.Bar(
    x=monthvise.index,
    y= monthvise['Open'],
    name='Bitcoin Open Price',
    marker_color='crimson'
))

fig.add_trace(go.Bar(
    x=monthvise.index,
    y= monthvise['Close'],
    name=' Bitcoin Close Price',
    marker_color='Lightsalmon'
))
fig.update_layout(barmode='group',xaxis_tickangle=-45,
                  title='Monthvise comparision between Bitcoin open and close price ')
fig.show()
In [65]:
y_2017.groupby(y_2017['Date'].dt.strftime('%B'))['Low'].min()
monthvise_high=y_2017.groupby(maindf['Date'].dt.strftime('%B'))['High'].max()
monthvise_high=monthvise_high.reindex(new_order,axis=0)
monthvise_low=y_2017.groupby(y_2017['Date'].dt.strftime('%B'))['Low'].min()
monthvise_low=monthvise_low.reindex(new_order,axis=0)
fig = go.Figure()
fig.add_trace(go.Bar(
    x=monthvise_high.index,
    y=monthvise_high,
    name='Bitcoin high Price',
     marker_color='rgb(0,153,204)'
))  
fig.add_trace(go.Bar(
    x=monthvise_low.index,
    y=monthvise_low,
    name='Bitcoin low  Price',
    marker_color='rgb(255,128,0)'
))
fig.update_layout(barmode='group',
                 title='Monthvise High and Low Bitcoin price')
fig.show()
In [66]:
name =cycle(['Bitcoin Open Price','Bitcoin Close Price','Bitcoin High Price','Bitcoin Low Price'])
fig=px.line(y_2017 ,x=y_2017.Date,y=[y_2017['Open'],y_2017['Close'],
                                    y_2017['High'],y_2017['Low']],
           labels={'Date':'Date','value':'Bitcoin value'})
fig.update_layout(title_text='Bitcoin analysis chart', font_size=15 , font_color='black',legend_title_text='Bitcoin Parameters')
fig.for_each_trace(lambda t: t.update(name=next(name)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()

Analysis of Year 2018¶

In [67]:
maindf['Date']=pd.to_datetime(maindf['Date'],format='%Y-%m-%d')
y_2018=maindf.loc[(maindf['Date']>='2018-01-01')&(maindf['Date']<'2019-01-01')]
y_2018.drop(y_2018[['Adj Close','Volume']],axis=1)
monthvise=y_2018.groupby(y_2018['Date'].dt.strftime('%B'))[['Open','Close']].mean()
new_order=['January','February','March','April','May','June','July','August','September','October','November','December']
monthvise = monthvise.reindex(new_order,axis=0)
monthvise
Out[67]:
Open Close
Date
January 13212.074219 13085.558090
February 9462.242920 9472.001151
March 9156.591718 9040.557097
April 7963.618311 8033.596631
May 8505.240675 8450.997732
June 6829.257975 6793.507666
July 7101.466450 7146.349987
August 6723.800955 6700.129946
September 6622.821338 6610.675033
October 6494.016491 6485.118747
November 5481.615120 5404.250171
December 3726.475106 3717.488344
In [68]:
fig = go.Figure()
fig.add_trace(go.Bar(
    x=monthvise.index,
    y= monthvise['Open'],
    name='Bitcoin Open Price',
    marker_color='crimson'
))

fig.add_trace(go.Bar(
    x=monthvise.index,
    y= monthvise['Close'],
    name=' Bitcoin Close Price',
    marker_color='Lightsalmon'
))
fig.update_layout(barmode='group',xaxis_tickangle=-45,
                  title='Monthvise comparision between Bitcoin open and close price ')
fig.show()
In [69]:
y_2018.groupby(y_2018['Date'].dt.strftime('%B'))['Low'].min()
monthvise_high=y_2018.groupby(maindf['Date'].dt.strftime('%B'))['High'].max()
monthvise_high=monthvise_high.reindex(new_order,axis=0)
monthvise_low=y_2018.groupby(y_2018['Date'].dt.strftime('%B'))['Low'].min()
monthvise_low=monthvise_low.reindex(new_order,axis=0)
fig = go.Figure()
fig.add_trace(go.Bar(
    x=monthvise_high.index,
    y=monthvise_high,
    name='Bitcoin high Price',
     marker_color='rgb(0,153,204)'
))  
fig.add_trace(go.Bar(
    x=monthvise_low.index,
    y=monthvise_low,
    name='Bitcoin low  Price',
    marker_color='rgb(255,128,0)'
))
fig.update_layout(barmode='group',
                 title='Monthvise High and Low Bitcoin price')
fig.show()
In [70]:
name =cycle(['Bitcoin Open Price','Bitcoin Close Price','Bitcoin High Price','Bitcoin Low Price'])
fig=px.line(y_2018 ,x=y_2018.Date,y=[y_2018['Open'],y_2018['Close'],
                                    y_2018['High'],y_2018['Low']],
           labels={'Date':'Date','value':'Bitcoin value'})
fig.update_layout(title_text='Bitcoin analysis chart', font_size=15 , font_color='black',legend_title_text='Bitcoin Parameters')
fig.for_each_trace(lambda t: t.update(name=next(name)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()

Analysis of year 2019¶

In [71]:
maindf['Date']=pd.to_datetime(maindf['Date'],format='%Y-%m-%d')
y_2019=maindf.loc[(maindf['Date']>='2018-01-01')&(maindf['Date']<'2019-01-01')]
y_2019.drop(y_2019[['Adj Close','Volume']],axis=1)
monthvise=y_2018.groupby(y_2018['Date'].dt.strftime('%B'))[['Open','Close']].mean()
new_order=['January','February','March','April','May','June','July','August','September','October','November','December']
monthvise = monthvise.reindex(new_order,axis=0)
monthvise
Out[71]:
Open Close
Date
January 13212.074219 13085.558090
February 9462.242920 9472.001151
March 9156.591718 9040.557097
April 7963.618311 8033.596631
May 8505.240675 8450.997732
June 6829.257975 6793.507666
July 7101.466450 7146.349987
August 6723.800955 6700.129946
September 6622.821338 6610.675033
October 6494.016491 6485.118747
November 5481.615120 5404.250171
December 3726.475106 3717.488344
In [72]:
fig = go.Figure()
fig.add_trace(go.Bar(
    x=monthvise.index,
    y= monthvise['Open'],
    name='Bitcoin Open Price',
    marker_color='crimson'
))

fig.add_trace(go.Bar(
    x=monthvise.index,
    y= monthvise['Close'],
    name=' Bitcoin Close Price',
    marker_color='Lightsalmon'
))
fig.update_layout(barmode='group',xaxis_tickangle=-45,
                  title='Monthvise comparision between Bitcoin open and close price ')
fig.show()
In [73]:
y_2019.groupby(y_2019['Date'].dt.strftime('%B'))['Low'].min()
monthvise_high=y_2019.groupby(maindf['Date'].dt.strftime('%B'))['High'].max()
monthvise_high=monthvise_high.reindex(new_order,axis=0)
monthvise_low=y_2019.groupby(y_2019['Date'].dt.strftime('%B'))['Low'].min()
monthvise_low=monthvise_low.reindex(new_order,axis=0)
fig = go.Figure()
fig.add_trace(go.Bar(
    x=monthvise_high.index,
    y=monthvise_high,
    name='Bitcoin high Price',
     marker_color='rgb(0,153,204)'
))  
fig.add_trace(go.Bar(
    x=monthvise_low.index,
    y=monthvise_low,
    name='Bitcoin low  Price',
    marker_color='rgb(255,128,0)'
))
fig.update_layout(barmode='group',
                 title='Monthvise High and Low Bitcoin price')
fig.show()
In [74]:
name =cycle(['Bitcoin Open Price','Bitcoin Close Price','Bitcoin High Price','Bitcoin Low Price'])
fig=px.line(y_2018 ,x=y_2018.Date,y=[y_2018['Open'],y_2018['Close'],
                                    y_2018['High'],y_2018['Low']],
           labels={'Date':'Date','value':'Bitcoin value'})
fig.update_layout(title_text='Bitcoin analysis chart', font_size=15 , font_color='black',legend_title_text='Bitcoin Parameters')
fig.for_each_trace(lambda t: t.update(name=next(name)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()

Analysis of Year 2020¶

In [75]:
maindf['Date']=pd.to_datetime(maindf['Date'],format='%Y-%m-%d')
y_2020=maindf.loc[(maindf['Date']>='2020-01-01')&(maindf['Date']<'2021-01-01')]
y_2020.drop(y_2020[['Adj Close','Volume']],axis=1)
monthvise=y_2020.groupby(y_2020['Date'].dt.strftime('%B'))[['Open','Close']].mean()
new_order=['January','February','March','April','May','June','July','August','September','October','November','December']
monthvise = monthvise.reindex(new_order,axis=0)
monthvise
Out[75]:
Open Close
Date
January 8318.949597 8389.270476
February 9656.215113 9630.722185
March 6943.507009 6871.016113
April 7150.611328 7224.477328
May 9237.761530 9263.151745
June 9499.797005 9489.227214
July 9519.383852 9589.899729
August 11639.097215 11652.394185
September 10689.700163 10660.276856
October 11791.307491 11886.978201
November 16450.121647 16645.757422
December 21680.540827 21983.137097
In [76]:
fig = go.Figure()
fig.add_trace(go.Bar(
    x=monthvise.index,
    y= monthvise['Open'],
    name='Bitcoin Open Price',
    marker_color='crimson'
))

fig.add_trace(go.Bar(
    x=monthvise.index,
    y= monthvise['Close'],
    name=' Bitcoin Close Price',
    marker_color='Lightsalmon'
))
fig.update_layout(barmode='group',xaxis_tickangle=-45,
                  title='Monthvise comparision between Bitcoin open and close price ')
fig.show()
In [77]:
y_2020.groupby(y_2020['Date'].dt.strftime('%B'))['Low'].min()
monthvise_high=y_2020.groupby(maindf['Date'].dt.strftime('%B'))['High'].max()
monthvise_high=monthvise_high.reindex(new_order,axis=0)
monthvise_low=y_2020.groupby(y_2020['Date'].dt.strftime('%B'))['Low'].min()
monthvise_low=monthvise_low.reindex(new_order,axis=0)
fig = go.Figure()
fig.add_trace(go.Bar(
    x=monthvise_high.index,
    y=monthvise_high,
    name='Bitcoin high Price',
     marker_color='rgb(0,153,204)'
))  
fig.add_trace(go.Bar(
    x=monthvise_low.index,
    y=monthvise_low,
    name='Bitcoin low  Price',
    marker_color='rgb(255,128,0)'
))
fig.update_layout(barmode='group',
                 title='Monthvise High and Low Bitcoin price')
fig.show()
In [78]:
name =cycle(['Bitcoin Open Price','Bitcoin Close Price','Bitcoin High Price','Bitcoin Low Price'])
fig=px.line(y_2020 ,x=y_2020.Date,y=[y_2020['Open'],y_2020['Close'],
                                    y_2020['High'],y_2020['Low']],
           labels={'Date':'Date','value':'Bitcoin value'})
fig.update_layout(title_text='Bitcoin analysis chart', font_size=15 , font_color='black',legend_title_text='Bitcoin Parameters')
fig.for_each_trace(lambda t: t.update(name=next(name)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()

Analysis of year 2021¶

In [79]:
maindf['Date']=pd.to_datetime(maindf['Date'],format='%Y-%m-%d')
y_2021=maindf.loc[(maindf['Date']>='2021-01-01')&(maindf['Date']<'2021-12-31')]
y_2021.drop(y_2021[['Adj Close','Volume']],axis=1)
monthvise=y_2021.groupby(y_2021['Date'].dt.strftime('%B'))[['Open','Close']].mean()
new_order=['January','February','March','April','May','June','July','August','September','October','November','December']
monthvise = monthvise.reindex(new_order,axis=0)
monthvise
Out[79]:
Open Close
Date
January 34652.961694 34761.649950
February 45874.967216 46306.798968
March 54544.678176 54998.008695
April 57251.256250 57206.720052
May 47105.828503 46443.286668
June 35920.546940 35845.154688
July 34234.212450 34444.973790
August 45516.119834 45709.022682
September 46041.859375 45939.771484
October 57344.743952 57911.970514
November 60857.520313 60621.488802
December 49753.779818 49361.767969
In [80]:
fig = go.Figure()
fig.add_trace(go.Bar(
    x=monthvise.index,
    y= monthvise['Open'],
    name='Bitcoin Open Price',
    marker_color='crimson'
))

fig.add_trace(go.Bar(
    x=monthvise.index,
    y= monthvise['Close'],
    name=' Bitcoin Close Price',
    marker_color='Lightsalmon'
))
fig.update_layout(barmode='group',xaxis_tickangle=-45,
                  title='Monthvise comparision between Bitcoin open and close price ')
fig.show()
In [81]:
y_2021.groupby(y_2021['Date'].dt.strftime('%B'))['Low'].min()
monthvise_high=y_2021.groupby(maindf['Date'].dt.strftime('%B'))['High'].max()
monthvise_high=monthvise_high.reindex(new_order,axis=0)
monthvise_low=y_2021.groupby(y_2021['Date'].dt.strftime('%B'))['Low'].min()
monthvise_low=monthvise_low.reindex(new_order,axis=0)
fig = go.Figure()
fig.add_trace(go.Bar(
    x=monthvise_high.index,
    y=monthvise_high,
    name='Bitcoin high Price',
     marker_color='rgb(0,153,204)'
))  
fig.add_trace(go.Bar(
    x=monthvise_low.index,
    y=monthvise_low,
    name='Bitcoin low  Price',
    marker_color='rgb(255,128,0)'
))
fig.update_layout(barmode='group',
                 title='Monthvise High and Low Bitcoin price')
fig.show()
In [82]:
name =cycle(['Bitcoin Open Price','Bitcoin Close Price','Bitcoin High Price','Bitcoin Low Price'])
fig=px.line(y_2021 ,x=y_2021.Date,y=[y_2021['Open'],y_2021['Close'],
                                    y_2021['High'],y_2021['Low']],
           labels={'Date':'Date','value':'Bitcoin value'})
fig.update_layout(title_text='Bitcoin analysis chart', font_size=15 , font_color='black',legend_title_text='Bitcoin Parameters')
fig.for_each_trace(lambda t: t.update(name=next(name)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()

Analysis of Year 2022¶

In [83]:
maindf['Date']=pd.to_datetime(maindf['Date'],format='%Y-%m-%d')
y_2022=maindf.loc[(maindf['Date']>='2022-01-01')&(maindf['Date']<'2022-02-19')]
y_2022.drop(y_2022[['Adj Close','Volume']],axis=1)
monthvise=y_2022.groupby(y_2022['Date'].dt.strftime('%B'))[['Open','Close']].mean()
new_order=['January','February','March','April','May','June','July','August','September','October','November','December']
monthvise = monthvise.reindex(new_order,axis=0)
monthvise
Out[83]:
Open Close
Date
January 41368.073463 41114.422379
February 41722.190538 41811.714627
March NaN NaN
April NaN NaN
May NaN NaN
June NaN NaN
July NaN NaN
August NaN NaN
September NaN NaN
October NaN NaN
November NaN NaN
December NaN NaN
In [84]:
fig = go.Figure()
fig.add_trace(go.Bar(
    x=monthvise.index,
    y= monthvise['Open'],
    name='Bitcoin Open Price',
    marker_color='crimson'
))

fig.add_trace(go.Bar(
    x=monthvise.index,
    y= monthvise['Close'],
    name=' Bitcoin Close Price',
    marker_color='Lightsalmon'
))
fig.update_layout(barmode='group',xaxis_tickangle=-45,
                  title='Monthvise comparision between Bitcoin open and close price ')
fig.show()
In [85]:
y_2022.groupby(y_2022['Date'].dt.strftime('%B'))['Low'].min()
monthvise_high=y_2022.groupby(maindf['Date'].dt.strftime('%B'))['High'].max()
monthvise_high=monthvise_high.reindex(new_order,axis=0)
monthvise_low=y_2022.groupby(y_2022['Date'].dt.strftime('%B'))['Low'].min()
monthvise_low=monthvise_low.reindex(new_order,axis=0)
fig = go.Figure()
fig.add_trace(go.Bar(
    x=monthvise_high.index,
    y=monthvise_high,
    name='Bitcoin high Price',
     marker_color='rgb(0,153,204)'
))  
fig.add_trace(go.Bar(
    x=monthvise_low.index,
    y=monthvise_low,
    name='Bitcoin low  Price',
    marker_color='rgb(255,128,0)'
))
fig.update_layout(barmode='group',
                 title='Monthvise High and Low Bitcoin price')
fig.show()
In [86]:
name =cycle(['Bitcoin Open Price','Bitcoin Close Price','Bitcoin High Price','Bitcoin Low Price'])
fig=px.line(y_2022,x=y_2022.Date,y=[y_2022['Open'],y_2022['Close'],
                                    y_2022['High'],y_2022['Low']],
           labels={'Date':'Date','value':'Bitcoin value'})
fig.update_layout(title_text='Bitcoin analysis chart', font_size=15 , font_color='black',legend_title_text='Bitcoin Parameters')
fig.for_each_trace(lambda t: t.update(name=next(name)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()

Overall Analysis from 2014-2022¶

In [87]:
maindf['Date']=pd.to_datetime(maindf['Date'],format='%Y-%m-%d')

y_overall=maindf.loc[(maindf['Date']>='2014-09-17')
                     &(maindf['Date']<'2022-02-19')]
y_overall.drop(y_overall[['Adj Close','Volume']],axis=1)
Out[87]:
Date Open High Low Close
0 2014-09-17 465.864014 468.174011 452.421997 457.334015
1 2014-09-18 456.859985 456.859985 413.104004 424.440002
2 2014-09-19 424.102997 427.834991 384.532013 394.795990
3 2014-09-20 394.673004 423.295990 389.882996 408.903992
4 2014-09-21 408.084991 412.425995 393.181000 398.821014
... ... ... ... ... ...
2707 2022-02-14 42157.398438 42775.777344 41681.957031 42586.917969
2708 2022-02-15 42586.464844 44667.218750 42491.035156 44575.203125
2709 2022-02-16 44578.277344 44578.277344 43456.691406 43961.859375
2710 2022-02-17 43937.070313 44132.972656 40249.371094 40538.011719
2711 2022-02-18 40552.132813 40929.152344 39637.617188 40030.976563

2712 rows × 5 columns

In [88]:
monthvise=y_overall.groupby(y_overall['Date'].dt.strftime('%B'))[['Open','Close']].mean()
new_order=['January','February','March','April','May','June','July','August','September','October','November','December']
monthvise = monthvise.reindex(new_order,axis=0)
monthvise
Out[88]:
Open Close
Date
January 12855.131425 12828.374881
February 12646.924792 12711.466195
March 10918.895761 10957.226324
April 11338.448900 11359.962198
May 10659.455257 10580.209317
June 9299.305977 9294.420703
July 9285.402500 9330.128271
August 11312.971706 11345.157739
September 10489.365578 10462.378150
October 11321.578327 11416.077925
November 12542.362183 12537.441752
December 12391.975010 12391.988926
In [89]:
name =cycle(['Bitcoin Open Price','Bitcoin Close Price','Bitcoin High Price','Bitcoin Low Price'])
fig=px.line(y_overall, x=y_overall.Date,y=[y_overall['Open'],y_overall['Close'],
                                    y_overall['High'],y_overall['Low']],
           labels={'Date':'Date','value':'Bitcoin value'})
fig.update_layout(title_text='Bitcoin analysis chart', font_size=15 , font_color='black',legend_title_text='Bitcoin Parameters')
fig.for_each_trace(lambda t: t.update(name=next(name)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()

Building LSTM Model¶

.First Step is Preparing Data for Traning and Testing

.Here we are just considering 1 year data for Training data

.As we want to predict Close Price of the Bitcoin so we are just Considering Close and Date

In [90]:
#first take all close price     
In [91]:
closedf = maindf[['Date', 'Close']]
print(" Shape of close dataframe :", closedf.shape)
 Shape of close dataframe : (2713, 2)
In [92]:
fig= px.line(closedf,x=closedf.Date, y=closedf.Close,labels={'date':'Date','close':'Close Stock'})
fig.update_traces(marker_line_width=2, opacity=0.8 , marker_line_color= 'orange')
                
fig.update_layout(title_text='Whole period of timeframe of Bitcoin close price 2014-2022', plot_bgcolor= 'white',
                  font_size=15 , font_color='black')
fig.update_xaxes(showgrid=False)                  
fig.update_yaxes(showgrid=False)
fig.show()
In [93]:
#Now we will take day of just 1 year
In [94]:
closedf=closedf[closedf['Date']>'2021-02-19']
close_stock=closedf.copy()
print("Total data for prediction:" , closedf.shape[0])
Total data for prediction: 365
In [95]:
closedf
Out[95]:
Date Close
2348 2021-02-20 56099.519531
2349 2021-02-21 57539.945313
2350 2021-02-22 54207.320313
2351 2021-02-23 48824.425781
2352 2021-02-24 49705.332031
... ... ...
2708 2022-02-15 44575.203125
2709 2022-02-16 43961.859375
2710 2022-02-17 40538.011719
2711 2022-02-18 40030.976563
2712 2022-02-19 40122.156250

365 rows × 2 columns

In [96]:
# fig= px.line(closedf,x=closedf.Date, y=closedf.Close,labels={'date':'Date','close':'Close Stock'})
fig.update_traces(marker_line_width=2, opacity=0.8 , marker_line_color= 'orange')
                
fig.update_layout(title_text='Considered period  to predict Bitcoin close price ',
                  plot_bgcolor= 'white', font_size=15 , font_color='black')
fig.update_xaxes(showgrid=False)                  
fig.update_yaxes(showgrid=False)
fig.show()

Normalising data¶

In [97]:
#detecting date column and normalising using MinMaxscaler
In [98]:
del closedf['Date']
scaler = MinMaxScaler(feature_range=(0 ,1))
closedf= scaler.fit_transform(np.array(closedf).reshape(-1 , 1))
print(closedf.shape)
(365, 1)
In [99]:
closedf
Out[99]:
array([[0.6963065 ],
       [0.7344539 ],
       [0.64619461],
       [0.50363718],
       [0.52696658],
       [0.45780566],
       [0.43783479],
       [0.43382762],
       [0.40600193],
       [0.52500443],
       [0.49184047],
       [0.54902489],
       [0.49666521],
       [0.50636176],
       [0.50596658],
       [0.56672771],
       [0.59426601],
       [0.6625295 ],
       [0.69389734],
       [0.74147666],
       [0.72894918],
       [0.83252571],
       [0.7811275 ],
       [0.69121321],
       [0.71498745],
       [0.76970198],
       [0.74290149],
       [0.75581826],
       [0.7549441 ],
       [0.7340163 ],
       [0.65471761],
       [0.66027385],
       [0.60824243],
       [0.57990238],
       [0.67082398],
       [0.69296939],
       [0.69236648],
       [0.74002214],
       [0.77094132],
       [0.77097153],
       [0.77565847],
       [0.78329904],
       [0.73614739],
       [0.76672684],
       [0.77465396],
       [0.75173205],
       [0.69496692],
       [0.7552171 ],
       [0.75312626],
       [0.79412869],
       [0.80503272],
       [0.79678282],
       [0.89238806],
       [0.8819599 ],
       [0.8873709 ],
       [0.84125737],
       [0.81771445],
       [0.69939617],
       [0.6863685 ],
       [0.70619837],
       [0.638217  ],
       [0.58144142],
       [0.56373405],
       [0.53611753],
       [0.50839964],
       [0.64128018],
       [0.66806453],
       [0.66254501],
       [0.62892183],
       [0.74002152],
       [0.74208392],
       [0.71038399],
       [0.72545875],
       [0.6230539 ],
       [0.73138348],
       [0.70417198],
       [0.72959305],
       [0.76792449],
       [0.75279025],
       [0.68995783],
       [0.71233042],
       [0.51227367],
       [0.52725418],
       [0.53160656],
       [0.4489691 ],
       [0.44091472],
       [0.36362164],
       [0.34698715],
       [0.19055066],
       [0.29066583],
       [0.19855527],
       [0.20469787],
       [0.1314434 ],
       [0.23566619],
       [0.22762164],
       [0.25124423],
       [0.22854184],
       [0.15599414],
       [0.1273513 ],
       [0.15547834],
       [0.19930115],
       [0.18214176],
       [0.20571872],
       [0.24898166],
       [0.18768952],
       [0.15213688],
       [0.16035791],
       [0.09940177],
       [0.09706927],
       [0.19962598],
       [0.18260977],
       [0.19934201],
       [0.15215167],
       [0.24604448],
       [0.27572225],
       [0.28069565],
       [0.22616081],
       [0.21838638],
       [0.15836813],
       [0.15382954],
       [0.15601245],
       [0.04950666],
       [0.07146053],
       [0.10370057],
       [0.12857936],
       [0.04847608],
       [0.06300218],
       [0.12824056],
       [0.12253845],
       [0.16050088],
       [0.13860064],
       [0.09970395],
       [0.1083092 ],
       [0.12874116],
       [0.1451406 ],
       [0.10430907],
       [0.11726453],
       [0.10720435],
       [0.08130471],
       [0.10568641],
       [0.09833747],
       [0.11739674],
       [0.08867972],
       [0.07666095],
       [0.0798475 ],
       [0.05226192],
       [0.0427493 ],
       [0.04570298],
       [0.05268777],
       [0.02676108],
       [0.        ],
       [0.06100046],
       [0.06636102],
       [0.09995379],
       [0.1187807 ],
       [0.14679333],
       [0.19942508],
       [0.25423003],
       [0.26982783],
       [0.27015928],
       [0.32914116],
       [0.31300345],
       [0.26927137],
       [0.24880103],
       [0.22102086],
       [0.26324929],
       [0.29296502],
       [0.34452678],
       [0.39058941],
       [0.37052336],
       [0.43851384],
       [0.41784695],
       [0.41807485],
       [0.38721246],
       [0.47632998],
       [0.45788759],
       [0.45656497],
       [0.4289555 ],
       [0.3942854 ],
       [0.39708809],
       [0.44784066],
       [0.51726951],
       [0.50578409],
       [0.51680543],
       [0.52275086],
       [0.47402055],
       [0.50724854],
       [0.45378991],
       [0.50984071],
       [0.50570226],
       [0.50378035],
       [0.45677632],
       [0.45973461],
       [0.50423574],
       [0.5169662 ],
       [0.53544241],
       [0.53330388],
       [0.58120669],
       [0.6045154 ],
       [0.4503182 ],
       [0.43125707],
       [0.43920292],
       [0.39927886],
       [0.40768859],
       [0.43051233],
       [0.4013754 ],
       [0.45776966],
       [0.48647385],
       [0.47606618],
       [0.46240498],
       [0.48917558],
       [0.46221163],
       [0.3452498 ],
       [0.28830715],
       [0.36460142],
       [0.39957515],
       [0.34514252],
       [0.34188092],
       [0.35490932],
       [0.32914602],
       [0.29733448],
       [0.31136593],
       [0.37033208],
       [0.48490057],
       [0.47416279],
       [0.48709901],
       [0.51127702],
       [0.5748878 ],
       [0.67675988],
       [0.63556586],
       [0.63985255],
       [0.6663459 ],
       [0.66113808],
       [0.73299317],
       [0.69475826],
       [0.73077674],
       [0.72866934],
       [0.84181777],
       [0.82323251],
       [0.84074964],
       [0.85326202],
       [0.91247666],
       [0.95831531],
       [0.85813745],
       [0.81793811],
       [0.83651229],
       [0.82425626],
       [0.88010948],
       [0.80923903],
       [0.75941297],
       [0.81608085],
       [0.85860867],
       [0.84962727],
       [0.83453504],
       [0.82620466],
       [0.8850507 ],
       [0.87826153],
       [0.83806457],
       [0.82941629],
       [0.84005745],
       [0.88771456],
       [1.        ],
       [0.98424237],
       [0.93189531],
       [0.93069642],
       [0.90966807],
       [0.9179729 ],
       [0.94438514],
       [0.89382913],
       [0.8038749 ],
       [0.80935076],
       [0.71862189],
       [0.74980456],
       [0.79158525],
       [0.76598323],
       [0.70133225],
       [0.73522533],
       [0.70109752],
       [0.72742876],
       [0.62930998],
       [0.66229011],
       [0.72673429],
       [0.74151494],
       [0.720298  ],
       [0.72624094],
       [0.7063251 ],
       [0.63006424],
       [0.51360229],
       [0.51805533],
       [0.5502003 ],
       [0.55331106],
       [0.54813914],
       [0.47312021],
       [0.46176369],
       [0.51788743],
       [0.53737467],
       [0.44836774],
       [0.44506134],
       [0.50555184],
       [0.4729429 ],
       [0.43419021],
       [0.45131526],
       [0.44756092],
       [0.45214949],
       [0.50660828],
       [0.4984487 ],
       [0.55554767],
       [0.55654494],
       [0.54615454],
       [0.55620913],
       [0.55173085],
       [0.47091505],
       [0.4406142 ],
       [0.46003751],
       [0.43695245],
       [0.47350929],
       [0.46446272],
       [0.44096924],
       [0.42612415],
       [0.36445566],
       [0.35364846],
       [0.31119482],
       [0.31585693],
       [0.32056198],
       [0.31816947],
       [0.34239104],
       [0.37452194],
       [0.33856988],
       [0.35202687],
       [0.35408461],
       [0.35240239],
       [0.32953852],
       [0.33285111],
       [0.31613201],
       [0.28795604],
       [0.17611388],
       [0.13832029],
       [0.17133332],
       [0.18133143],
       [0.18926786],
       [0.18656966],
       [0.19414692],
       [0.21125779],
       [0.22062888],
       [0.21478722],
       [0.22976421],
       [0.23665383],
       [0.18924086],
       [0.19458038],
       [0.30968454],
       [0.30810319],
       [0.33382572],
       [0.37164011],
       [0.37900674],
       [0.3848424 ],
       [0.36435262],
       [0.33370665],
       [0.32937744],
       [0.32813396],
       [0.33844667],
       [0.39110325],
       [0.37485981],
       [0.28418463],
       [0.27075661],
       [0.27317136]])

Slicing data into Training set and Testing set¶

In [100]:
# the training  set as 60% and 40% testing set
In [101]:
training_size = int(len(closedf)*0.60) 
test_size = len(closedf)-training_size
train_data , test_data =closedf[0:training_size,:],closedf[training_size:len(closedf),:1]
print('train_data:' , train_data.shape)  
print('test_data:' ,  test_data.shape) 
train_data: (219, 1)
test_data: (146, 1)

Now transform the Close price based on Time-series-anaylis forcasting requirement , Here we take 15¶

In [102]:
#convert an array of values into a dataset matrix
In [103]:
def create_dataset ( dataset , time_step=1):
    dataX , dataY=[],[]
    for i in range (len(dataset)-time_step-1):
        a= dataset[i:(i+time_step),0]  
        dataX.append(a)
        dataY.append(dataset[i+ time_step , 0])
    return np.array(dataX) ,np.array(dataY)
In [104]:
time_step = 15
X_train, y_train = create_dataset(train_data , time_step)
X_test, y_test =  create_dataset (test_data , time_step)

print("X_train:" , X_train.shape)
print("y_train:" , y_train.shape)
print("X_test:" ,  X_test.shape)
print("y_test:" ,  y_test.shape)
X_train: (203, 15)
y_train: (203,)
X_test: (130, 15)
y_test: (130,)
In [105]:
#reshape input to be [samples , time steps , feature]which requiresd gfor lSTM
X_train = X_train.reshape(X_train.shape[0] ,X_train.shape[1] ,1)
X_test =  X_test.reshape(X_test.shape[0] ,X_test.shape[1] ,1)

print("X_train: ",X_train.shape)
print("X_test: ",X_test.shape)
X_train:  (203, 15, 1)
X_test:  (130, 15, 1)

Actuall Model Buiding¶

In [106]:
model= Sequential()
model.add(LSTM( 10 , input_shape=(None , 1) , activation ="relu"))
model.add(Dense(1))
model.compile(loss="mean_squared_error",optimizer="adam")
In [107]:
history = model.fit(X_train , y_train, validation_data=(X_test,y_test), epochs=200, batch_size=32,verbose=1)
Epoch 1/200
7/7 [==============================] - 6s 180ms/step - loss: 0.2597 - val_loss: 0.3680
Epoch 2/200
7/7 [==============================] - 0s 43ms/step - loss: 0.2249 - val_loss: 0.3158
Epoch 3/200
7/7 [==============================] - 0s 31ms/step - loss: 0.1904 - val_loss: 0.2611
Epoch 4/200
7/7 [==============================] - 0s 32ms/step - loss: 0.1534 - val_loss: 0.2013
Epoch 5/200
7/7 [==============================] - 0s 33ms/step - loss: 0.1147 - val_loss: 0.1330
Epoch 6/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0709 - val_loss: 0.0567
Epoch 7/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0281 - val_loss: 0.0140
Epoch 8/200
7/7 [==============================] - 0s 31ms/step - loss: 0.0167 - val_loss: 0.0418
Epoch 9/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0163 - val_loss: 0.0113
Epoch 10/200
7/7 [==============================] - 0s 40ms/step - loss: 0.0137 - val_loss: 0.0108
Epoch 11/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0139 - val_loss: 0.0104
Epoch 12/200
7/7 [==============================] - 0s 25ms/step - loss: 0.0129 - val_loss: 0.0125
Epoch 13/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0130 - val_loss: 0.0131
Epoch 14/200
7/7 [==============================] - 0s 30ms/step - loss: 0.0128 - val_loss: 0.0113
Epoch 15/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0124 - val_loss: 0.0098
Epoch 16/200
7/7 [==============================] - 0s 25ms/step - loss: 0.0125 - val_loss: 0.0097
Epoch 17/200
7/7 [==============================] - 0s 27ms/step - loss: 0.0122 - val_loss: 0.0100
Epoch 18/200
7/7 [==============================] - 0s 31ms/step - loss: 0.0123 - val_loss: 0.0123
Epoch 19/200
7/7 [==============================] - 0s 31ms/step - loss: 0.0118 - val_loss: 0.0095
Epoch 20/200
7/7 [==============================] - 0s 56ms/step - loss: 0.0115 - val_loss: 0.0090
Epoch 21/200
7/7 [==============================] - 0s 36ms/step - loss: 0.0114 - val_loss: 0.0089
Epoch 22/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0112 - val_loss: 0.0107
Epoch 23/200
7/7 [==============================] - 0s 31ms/step - loss: 0.0108 - val_loss: 0.0087
Epoch 24/200
7/7 [==============================] - 0s 36ms/step - loss: 0.0106 - val_loss: 0.0082
Epoch 25/200
7/7 [==============================] - 0s 40ms/step - loss: 0.0104 - val_loss: 0.0089
Epoch 26/200
7/7 [==============================] - 0s 32ms/step - loss: 0.0103 - val_loss: 0.0094
Epoch 27/200
7/7 [==============================] - 0s 31ms/step - loss: 0.0100 - val_loss: 0.0078
Epoch 28/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0097 - val_loss: 0.0083
Epoch 29/200
7/7 [==============================] - 0s 37ms/step - loss: 0.0095 - val_loss: 0.0080
Epoch 30/200
7/7 [==============================] - 0s 27ms/step - loss: 0.0092 - val_loss: 0.0073
Epoch 31/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0090 - val_loss: 0.0071
Epoch 32/200
7/7 [==============================] - 0s 30ms/step - loss: 0.0080 - val_loss: 0.0061
Epoch 33/200
7/7 [==============================] - 0s 31ms/step - loss: 0.0072 - val_loss: 0.0062
Epoch 34/200
7/7 [==============================] - 0s 32ms/step - loss: 0.0075 - val_loss: 0.0052
Epoch 35/200
7/7 [==============================] - 0s 31ms/step - loss: 0.0068 - val_loss: 0.0073
Epoch 36/200
7/7 [==============================] - 0s 27ms/step - loss: 0.0066 - val_loss: 0.0044
Epoch 37/200
7/7 [==============================] - 0s 32ms/step - loss: 0.0063 - val_loss: 0.0048
Epoch 38/200
7/7 [==============================] - 0s 32ms/step - loss: 0.0060 - val_loss: 0.0040
Epoch 39/200
7/7 [==============================] - 0s 31ms/step - loss: 0.0057 - val_loss: 0.0045
Epoch 40/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0055 - val_loss: 0.0037
Epoch 41/200
7/7 [==============================] - 0s 24ms/step - loss: 0.0055 - val_loss: 0.0038
Epoch 42/200
7/7 [==============================] - 0s 27ms/step - loss: 0.0053 - val_loss: 0.0036
Epoch 43/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0051 - val_loss: 0.0037
Epoch 44/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0052 - val_loss: 0.0036
Epoch 45/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0050 - val_loss: 0.0036
Epoch 46/200
7/7 [==============================] - 0s 25ms/step - loss: 0.0050 - val_loss: 0.0035
Epoch 47/200
7/7 [==============================] - 0s 24ms/step - loss: 0.0054 - val_loss: 0.0036
Epoch 48/200
7/7 [==============================] - 0s 32ms/step - loss: 0.0050 - val_loss: 0.0035
Epoch 49/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0049 - val_loss: 0.0038
Epoch 50/200
7/7 [==============================] - 0s 30ms/step - loss: 0.0050 - val_loss: 0.0035
Epoch 51/200
7/7 [==============================] - 0s 27ms/step - loss: 0.0050 - val_loss: 0.0037
Epoch 52/200
7/7 [==============================] - 0s 25ms/step - loss: 0.0047 - val_loss: 0.0036
Epoch 53/200
7/7 [==============================] - 0s 30ms/step - loss: 0.0048 - val_loss: 0.0037
Epoch 54/200
7/7 [==============================] - 0s 26ms/step - loss: 0.0047 - val_loss: 0.0035
Epoch 55/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0049 - val_loss: 0.0034
Epoch 56/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0046 - val_loss: 0.0037
Epoch 57/200
7/7 [==============================] - 0s 25ms/step - loss: 0.0047 - val_loss: 0.0034
Epoch 58/200
7/7 [==============================] - 0s 23ms/step - loss: 0.0046 - val_loss: 0.0035
Epoch 59/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0045 - val_loss: 0.0038
Epoch 60/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0045 - val_loss: 0.0034
Epoch 61/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0045 - val_loss: 0.0035
Epoch 62/200
7/7 [==============================] - 0s 25ms/step - loss: 0.0044 - val_loss: 0.0039
Epoch 63/200
7/7 [==============================] - 0s 24ms/step - loss: 0.0045 - val_loss: 0.0034
Epoch 64/200
7/7 [==============================] - 0s 27ms/step - loss: 0.0049 - val_loss: 0.0034
Epoch 65/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0045 - val_loss: 0.0041
Epoch 66/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0043 - val_loss: 0.0034
Epoch 67/200
7/7 [==============================] - 0s 27ms/step - loss: 0.0044 - val_loss: 0.0035
Epoch 68/200
7/7 [==============================] - 0s 25ms/step - loss: 0.0043 - val_loss: 0.0034
Epoch 69/200
7/7 [==============================] - 0s 24ms/step - loss: 0.0043 - val_loss: 0.0035
Epoch 70/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0043 - val_loss: 0.0034
Epoch 71/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0043 - val_loss: 0.0034
Epoch 72/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0042 - val_loss: 0.0037
Epoch 73/200
7/7 [==============================] - 0s 25ms/step - loss: 0.0043 - val_loss: 0.0035
Epoch 74/200
7/7 [==============================] - 0s 25ms/step - loss: 0.0042 - val_loss: 0.0035
Epoch 75/200
7/7 [==============================] - 0s 27ms/step - loss: 0.0042 - val_loss: 0.0035
Epoch 76/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0044 - val_loss: 0.0034
Epoch 77/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0043 - val_loss: 0.0038
Epoch 78/200
7/7 [==============================] - 0s 26ms/step - loss: 0.0042 - val_loss: 0.0034
Epoch 79/200
7/7 [==============================] - 0s 23ms/step - loss: 0.0042 - val_loss: 0.0041
Epoch 80/200
7/7 [==============================] - 0s 25ms/step - loss: 0.0041 - val_loss: 0.0033
Epoch 81/200
7/7 [==============================] - 0s 27ms/step - loss: 0.0042 - val_loss: 0.0035
Epoch 82/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0043 - val_loss: 0.0035
Epoch 83/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0042 - val_loss: 0.0033
Epoch 84/200
7/7 [==============================] - 0s 24ms/step - loss: 0.0040 - val_loss: 0.0040
Epoch 85/200
7/7 [==============================] - 0s 26ms/step - loss: 0.0044 - val_loss: 0.0034
Epoch 86/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0041 - val_loss: 0.0033
Epoch 87/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0043 - val_loss: 0.0037
Epoch 88/200
7/7 [==============================] - 0s 27ms/step - loss: 0.0040 - val_loss: 0.0033
Epoch 89/200
7/7 [==============================] - 0s 27ms/step - loss: 0.0040 - val_loss: 0.0035
Epoch 90/200
7/7 [==============================] - 0s 25ms/step - loss: 0.0042 - val_loss: 0.0033
Epoch 91/200
7/7 [==============================] - 0s 25ms/step - loss: 0.0041 - val_loss: 0.0033
Epoch 92/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0040 - val_loss: 0.0035
Epoch 93/200
7/7 [==============================] - 0s 30ms/step - loss: 0.0039 - val_loss: 0.0033
Epoch 94/200
7/7 [==============================] - 0s 33ms/step - loss: 0.0040 - val_loss: 0.0033
Epoch 95/200
7/7 [==============================] - 0s 25ms/step - loss: 0.0041 - val_loss: 0.0042
Epoch 96/200
7/7 [==============================] - 0s 30ms/step - loss: 0.0040 - val_loss: 0.0032
Epoch 97/200
7/7 [==============================] - 0s 27ms/step - loss: 0.0040 - val_loss: 0.0033
Epoch 98/200
7/7 [==============================] - 0s 34ms/step - loss: 0.0038 - val_loss: 0.0033
Epoch 99/200
7/7 [==============================] - 0s 35ms/step - loss: 0.0038 - val_loss: 0.0032
Epoch 100/200
7/7 [==============================] - 0s 30ms/step - loss: 0.0039 - val_loss: 0.0033
Epoch 101/200
7/7 [==============================] - 0s 31ms/step - loss: 0.0038 - val_loss: 0.0035
Epoch 102/200
7/7 [==============================] - 0s 32ms/step - loss: 0.0040 - val_loss: 0.0033
Epoch 103/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0040 - val_loss: 0.0035
Epoch 104/200
7/7 [==============================] - 0s 30ms/step - loss: 0.0038 - val_loss: 0.0033
Epoch 105/200
7/7 [==============================] - 0s 26ms/step - loss: 0.0039 - val_loss: 0.0032
Epoch 106/200
7/7 [==============================] - 0s 30ms/step - loss: 0.0037 - val_loss: 0.0037
Epoch 107/200
7/7 [==============================] - 0s 37ms/step - loss: 0.0038 - val_loss: 0.0032
Epoch 108/200
7/7 [==============================] - 0s 43ms/step - loss: 0.0037 - val_loss: 0.0032
Epoch 109/200
7/7 [==============================] - 0s 35ms/step - loss: 0.0037 - val_loss: 0.0031
Epoch 110/200
7/7 [==============================] - 0s 33ms/step - loss: 0.0037 - val_loss: 0.0033
Epoch 111/200
7/7 [==============================] - 0s 38ms/step - loss: 0.0037 - val_loss: 0.0033
Epoch 112/200
7/7 [==============================] - 0s 35ms/step - loss: 0.0037 - val_loss: 0.0031
Epoch 113/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0036 - val_loss: 0.0031
Epoch 114/200
7/7 [==============================] - 0s 30ms/step - loss: 0.0036 - val_loss: 0.0033
Epoch 115/200
7/7 [==============================] - 0s 26ms/step - loss: 0.0036 - val_loss: 0.0031
Epoch 116/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0036 - val_loss: 0.0032
Epoch 117/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0035 - val_loss: 0.0029
Epoch 118/200
7/7 [==============================] - 0s 30ms/step - loss: 0.0036 - val_loss: 0.0032
Epoch 119/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0035 - val_loss: 0.0029
Epoch 120/200
7/7 [==============================] - 0s 31ms/step - loss: 0.0036 - val_loss: 0.0030
Epoch 121/200
7/7 [==============================] - 0s 31ms/step - loss: 0.0035 - val_loss: 0.0032
Epoch 122/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0037 - val_loss: 0.0029
Epoch 123/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0037 - val_loss: 0.0030
Epoch 124/200
7/7 [==============================] - 0s 27ms/step - loss: 0.0040 - val_loss: 0.0031
Epoch 125/200
7/7 [==============================] - 0s 26ms/step - loss: 0.0038 - val_loss: 0.0028
Epoch 126/200
7/7 [==============================] - 0s 30ms/step - loss: 0.0036 - val_loss: 0.0031
Epoch 127/200
7/7 [==============================] - 0s 35ms/step - loss: 0.0034 - val_loss: 0.0028
Epoch 128/200
7/7 [==============================] - 0s 31ms/step - loss: 0.0033 - val_loss: 0.0033
Epoch 129/200
7/7 [==============================] - 0s 25ms/step - loss: 0.0036 - val_loss: 0.0029
Epoch 130/200
7/7 [==============================] - 0s 26ms/step - loss: 0.0034 - val_loss: 0.0029
Epoch 131/200
7/7 [==============================] - 0s 27ms/step - loss: 0.0034 - val_loss: 0.0031
Epoch 132/200
7/7 [==============================] - 0s 36ms/step - loss: 0.0033 - val_loss: 0.0028
Epoch 133/200
7/7 [==============================] - 0s 36ms/step - loss: 0.0034 - val_loss: 0.0029
Epoch 134/200
7/7 [==============================] - 0s 31ms/step - loss: 0.0032 - val_loss: 0.0027
Epoch 135/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0032 - val_loss: 0.0029
Epoch 136/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0032 - val_loss: 0.0027
Epoch 137/200
7/7 [==============================] - 0s 33ms/step - loss: 0.0032 - val_loss: 0.0027
Epoch 138/200
7/7 [==============================] - 0s 36ms/step - loss: 0.0032 - val_loss: 0.0028
Epoch 139/200
7/7 [==============================] - 0s 36ms/step - loss: 0.0031 - val_loss: 0.0027
Epoch 140/200
7/7 [==============================] - 0s 40ms/step - loss: 0.0031 - val_loss: 0.0028
Epoch 141/200
7/7 [==============================] - 0s 36ms/step - loss: 0.0031 - val_loss: 0.0026
Epoch 142/200
7/7 [==============================] - 0s 33ms/step - loss: 0.0032 - val_loss: 0.0026
Epoch 143/200
7/7 [==============================] - 0s 27ms/step - loss: 0.0030 - val_loss: 0.0026
Epoch 144/200
7/7 [==============================] - 0s 25ms/step - loss: 0.0031 - val_loss: 0.0027
Epoch 145/200
7/7 [==============================] - 0s 27ms/step - loss: 0.0030 - val_loss: 0.0026
Epoch 146/200
7/7 [==============================] - 0s 32ms/step - loss: 0.0030 - val_loss: 0.0026
Epoch 147/200
7/7 [==============================] - 0s 32ms/step - loss: 0.0030 - val_loss: 0.0026
Epoch 148/200
7/7 [==============================] - 0s 27ms/step - loss: 0.0030 - val_loss: 0.0026
Epoch 149/200
7/7 [==============================] - 0s 25ms/step - loss: 0.0029 - val_loss: 0.0026
Epoch 150/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0029 - val_loss: 0.0028
Epoch 151/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0030 - val_loss: 0.0027
Epoch 152/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0029 - val_loss: 0.0034
Epoch 153/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0029 - val_loss: 0.0029
Epoch 154/200
7/7 [==============================] - 0s 31ms/step - loss: 0.0029 - val_loss: 0.0038
Epoch 155/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0030 - val_loss: 0.0033
Epoch 156/200
7/7 [==============================] - 0s 32ms/step - loss: 0.0030 - val_loss: 0.0030
Epoch 157/200
7/7 [==============================] - 0s 31ms/step - loss: 0.0029 - val_loss: 0.0027
Epoch 158/200
7/7 [==============================] - 0s 31ms/step - loss: 0.0028 - val_loss: 0.0027
Epoch 159/200
7/7 [==============================] - 0s 24ms/step - loss: 0.0028 - val_loss: 0.0029
Epoch 160/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0030 - val_loss: 0.0030
Epoch 161/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0029 - val_loss: 0.0028
Epoch 162/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0028 - val_loss: 0.0027
Epoch 163/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0029 - val_loss: 0.0027
Epoch 164/200
7/7 [==============================] - 0s 32ms/step - loss: 0.0028 - val_loss: 0.0027
Epoch 165/200
7/7 [==============================] - 0s 30ms/step - loss: 0.0029 - val_loss: 0.0034
Epoch 166/200
7/7 [==============================] - 0s 33ms/step - loss: 0.0028 - val_loss: 0.0032
Epoch 167/200
7/7 [==============================] - 0s 35ms/step - loss: 0.0029 - val_loss: 0.0028
Epoch 168/200
7/7 [==============================] - 0s 32ms/step - loss: 0.0028 - val_loss: 0.0032
Epoch 169/200
7/7 [==============================] - 0s 32ms/step - loss: 0.0029 - val_loss: 0.0030
Epoch 170/200
7/7 [==============================] - 0s 34ms/step - loss: 0.0028 - val_loss: 0.0028
Epoch 171/200
7/7 [==============================] - 0s 45ms/step - loss: 0.0029 - val_loss: 0.0030
Epoch 172/200
7/7 [==============================] - 0s 36ms/step - loss: 0.0029 - val_loss: 0.0028
Epoch 173/200
7/7 [==============================] - 0s 33ms/step - loss: 0.0029 - val_loss: 0.0035
Epoch 174/200
7/7 [==============================] - 0s 32ms/step - loss: 0.0028 - val_loss: 0.0028
Epoch 175/200
7/7 [==============================] - 0s 32ms/step - loss: 0.0028 - val_loss: 0.0028
Epoch 176/200
7/7 [==============================] - 0s 38ms/step - loss: 0.0028 - val_loss: 0.0033
Epoch 177/200
7/7 [==============================] - 0s 31ms/step - loss: 0.0029 - val_loss: 0.0031
Epoch 178/200
7/7 [==============================] - 0s 26ms/step - loss: 0.0030 - val_loss: 0.0043
Epoch 179/200
7/7 [==============================] - 0s 30ms/step - loss: 0.0031 - val_loss: 0.0070
Epoch 180/200
7/7 [==============================] - 0s 35ms/step - loss: 0.0035 - val_loss: 0.0049
Epoch 181/200
7/7 [==============================] - 0s 31ms/step - loss: 0.0035 - val_loss: 0.0031
Epoch 182/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0029 - val_loss: 0.0029
Epoch 183/200
7/7 [==============================] - 0s 25ms/step - loss: 0.0028 - val_loss: 0.0028
Epoch 184/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0029 - val_loss: 0.0027
Epoch 185/200
7/7 [==============================] - 0s 31ms/step - loss: 0.0029 - val_loss: 0.0026
Epoch 186/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0028 - val_loss: 0.0027
Epoch 187/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0028 - val_loss: 0.0027
Epoch 188/200
7/7 [==============================] - 0s 24ms/step - loss: 0.0028 - val_loss: 0.0029
Epoch 189/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0028 - val_loss: 0.0029
Epoch 190/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0030 - val_loss: 0.0031
Epoch 191/200
7/7 [==============================] - 0s 31ms/step - loss: 0.0028 - val_loss: 0.0028
Epoch 192/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0028 - val_loss: 0.0029
Epoch 193/200
7/7 [==============================] - 0s 25ms/step - loss: 0.0027 - val_loss: 0.0028
Epoch 194/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0029 - val_loss: 0.0037
Epoch 195/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0028 - val_loss: 0.0028
Epoch 196/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0027 - val_loss: 0.0043
Epoch 197/200
7/7 [==============================] - 0s 30ms/step - loss: 0.0029 - val_loss: 0.0028
Epoch 198/200
7/7 [==============================] - 0s 28ms/step - loss: 0.0028 - val_loss: 0.0028
Epoch 199/200
7/7 [==============================] - 0s 27ms/step - loss: 0.0031 - val_loss: 0.0030
Epoch 200/200
7/7 [==============================] - 0s 29ms/step - loss: 0.0027 - val_loss: 0.0029

Plotting loss vs validation loss

In [108]:
loss= history.history['loss']
val_loss = history.history['val_loss']

epochs = range(len(loss))

plt.plot(epochs , loss, 'r' , label='Training loss')
plt.plot(epochs , val_loss, 'b' , label='Validation loss')
plt.title('Training and Validation loss')
plt.legend(loc=0) 
plt.figure()


plt.show()
<Figure size 640x480 with 0 Axes>
In [109]:
#do the prediction and chech performance metrics
In [110]:
train_predict=model.predict(X_train)
test_predict=model.predict(X_test)
train_predict.shape , test_predict.shape
7/7 [==============================] - 1s 7ms/step
5/5 [==============================] - 0s 5ms/step
Out[110]:
((203, 1), (130, 1))

Model evaluation¶

In [111]:
#transform back to original form
train_predict= scaler.inverse_transform(train_predict)
test__predict= scaler.inverse_transform(test_predict)
original_ytrain= scaler.inverse_transform(y_train.reshape(-1,1))
original_ytest= scaler.inverse_transform(y_test.reshape(-1,1))

                                                                    
    

Evaluation metrices RMSE , MSE and MAE¶

In [112]:
#Evaluation metrices RMSE and MAE
In [113]:
print ("Train data RMSE"  , math.sqrt(mean_squared_error(original_ytrain ,train_predict)))
print("Train data MSE :" , mean_squared_error(original_ytrain , train_predict))
print("Train data MAE: ", mean_absolute_error(original_ytrain , train_predict))
print("----------------------------------------------------------------------------------------------")      
print ("Test data RMSE"  , math.sqrt(mean_squared_error(original_ytest ,test_predict)))
print("Test data MSE:" , mean_squared_error(original_ytest , test_predict))
print("Test data MAE:",   mean_absolute_error(original_ytest , test_predict) )
Train data RMSE 2024.0435355669936
Train data MSE : 4096752.2338705356
Train data MAE:  1627.7007678171178
----------------------------------------------------------------------------------------------
Test data RMSE 51514.50823689252
Test data MSE: 2653744558.8888674
Test data MAE: 50716.51244911729

Variance Regression Score¶

In [114]:
print("Train data explained variance regression score:",
    explained_variance_score(original_ytrain , train_predict))
print("Test data explained variance regression score:",
    explained_variance_score(original_ytest , test_predict))
 
Train data explained variance regression score: 0.9544086456839961
Test data explained variance regression score: 4.828686840196994e-05

R square score regression¶

In [115]:
print("Train data R2 score :", r2_score(original_ytrain , train_predict))
print("Test data R2 score :", r2_score(original_ytest , test_predict))
Train data R2 score : 0.9529153126836228
Test data R2 score : -31.527811885890863

Regression loss mean gamma deviance regression loss(MGD) and Mean Poisson deviance regression loss(MPD)¶

In [116]:
print("Train data MGD :" , mean_gamma_deviance(original_ytrain , train_predict))
print("Test data MGD:", mean_gamma_deviance(original_ytest , test_predict))
print("----------------------------------------------------------------------------------------------")      
print ("Train data MPD"  , mean_poisson_deviance(original_ytrain ,train_predict))
print("Test data MPD:" , mean_poisson_deviance(original_ytest , test_predict))
Train data MGD : 0.002058731278305184
Test data MGD: 212418.36536487108
----------------------------------------------------------------------------------------------
Train data MPD 90.20594226156709
Test data MPD: 1063029.6838295942

Comparision of original stock close and predicted close price¶

In [117]:
#shift key prediction
#shift train predictions for plottin
In [118]:
look_back=time_step
trainPredictPlot= np.empty_like(closedf)
trainPredictPlot[:, :]=np.nan
trainPredictPlot[look_back:len(train_predict)+look_back, :]=train_predict
print("Train predicted data :",trainPredictPlot.shape)

#shift test predictions for plotting 
testPredictPlot= np.empty_like(closedf)
testPredictPlot[:, :]= np.nan
testPredictPlot[len(train_predict)+(look_back*2)+1 :len(closedf)-1 ,:]=test_predict
print("Test predicted data :",testPredictPlot.shape)

names=cycle(['Original close price','Train predicted close price ','Test predicted close price'])

plotdf = pd.DataFrame({'date': close_stock ['Date'],
                    'original_close':close_stock['Close'],
                     'train_predicted_close':  trainPredictPlot.reshape(1,-1)[0].tolist(),
                     'test_predicted_close':  testPredictPlot.reshape(1,-1)[0].tolist()})

fig= px.line(plotdf,x=plotdf['date'],y=[plotdf ['original_close'],plotdf['train_predicted_close'],plotdf['test_predicted_close']],
                     labels={'value':'Stock price','date': 'Date'})
                                                 
fig.update_layout(title_text='Comparision between original close price vs predicted close price',
                   plot_bgcolor='white',font_size=15 ,font_color='black' ,legend_title_text='Close price')
fig.for_each_trace(lambda t:  t.update(name=next(names)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)

fig.show()                                                                      
                                                 
             
Train predicted data : (365, 1)
Test predicted data : (365, 1)

predicting next 30 days¶

In [119]:
x_input = test_data[len(test_data)-time_step:].reshape(1,-1)
temp_input=list(x_input)
temp_input=temp_input[0].tolist()


from numpy import array

lst_output=[]
n_steps=time_step
i=0
pred_days =30
while(i<pred_days):

         if(len(temp_input)>time_step):
            
              x_input =np.array(temp_input[1:])
                
              x_input= x_input.reshape(1,-1)
              x_input= x_input.reshape ((1, n_steps ,1))
                
              yhat= model.predict(x_input , verbose=0)
              temp_input.extend(yhat[0].tolist())
              temp_input = temp_input[1:]
              lst_output.extend(yhat.tolist())
              i=i+1 
         else:
            
              x_input=x_input.reshape(1, n_steps ,1)
              yhat= model.predict(x_input , verbose=0)
              temp_input.extend(yhat[0].tolist())   
              lst_output.extend(yhat.tolist())
            
              i=i+1
print("Output of predicted next days :",len(lst_output))
Output of predicted next days : 30

plotting last 15 days and dataset and next predicted 30 days¶

In [120]:
last_days =np.arange(1 , time_step+1)
day_pred= np.arange(time_step+1 , time_step+pred_days+1)
print(last_days)
print(day_pred)
[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15]
[16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
 40 41 42 43 44 45]
In [121]:
temp_mat =np.empty((len(last_days)+pred_days+1,1))
temp_mat[:]=np.nan
temp_mat=temp_mat.reshape(1,-1).tolist()[0]
            
last_original_days_value = temp_mat
next_predicted_days_value= temp_mat
                   
last_original_days_value[0:time_step+1]= scaler.inverse_transform(closedf[len(closedf)-time_step:]).reshape(1,-1).tolist()[0]
next_predicted_days_value[time_step+1:]=scaler.inverse_transform(np.array(lst_output).reshape(1,-1)).tolist()[0]
  
new_pred_plot = pd.DataFrame ({
         'last_original_days_value': last_original_days_value,
        'next_predicted_days_value': next_predicted_days_value
})
                                                                 
names= cycle (['Last 15 days close price','Predicted next 30 days close price'])

fig=px.line(new_pred_plot,x=new_pred_plot.index, y=[new_pred_plot['last_original_days_value'], 
                                                      new_pred_plot['next_predicted_days_value']],
                    labels={'value':'Stock price','index':'Timestamp'})
                                                                 
                                                 
fig.update_layout(title_text='Compare last 15 days vs next 30 days',
                   plot_bgcolor='white',font_size=15 ,font_color='black' ,legend_title_text='Close price')
fig.for_each_trace(lambda t:  t.update(name=next(names)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)

fig.show()
                                                                 

plotting entire closing stock price with next 30 days period of prediction¶

In [122]:
lstmdf=closedf.tolist()
lstmdf.extend((np.array(lst_output).reshape(-1,1)).tolist())
lstmdf=scaler.inverse_transform(lstmdf).reshape(1,-1).tolist()[0]

names =cycle(['Close price'])

fig=px.line(lstmdf , labels={'value': 'Stock price','index':'Timestamp'})
fig.update_layout(title_text='Plotting whole closing stock price with prediction',
                             plot_bgcolor='white', font_size=15 , font_color='black' , legend_title_text='Stock')
fig.for_each_trace(lambda t: t.update(name= next (names)))

fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)

fig.show()
                                                                 

Bitcoin Price Prediction Using LSTM.

In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]: